嗨大家今天過得好嗎?昨天介紹怎麼讓 icon 動起來的 Animated icon,但其實除了 drawable 外的其他不是 View 的 resource 在 Property Animation 的世界裡都可以動起來,只要指定哪個物件、動畫的時間長度和每個時間點對應的物件位置,現在讓我們一起動起來。
Property Animation 需要定義下列幾項動畫要素:
因為 ValueAnimator 繼承自 TimeInterpolator 與 TypeEvalutor 可以計算動畫的模型,ValueAnimator 還可以知道起始位置、經過時間、以及開始動畫,動畫開始後可以透過 ValueAnimator.AnimatorUpdatelistener 監聽動畫的更新, ValueAnimator 預設有 IntEvaluator、FloatEvaluator、ArgbEvaluator 等物件定義 value type,如果是 Int、Float 和顏色之外的 value type 也可以繼承 TypeEvaluator 的 Interface 後自行實作。
// MyTypeEvaluator 需要繼承 TypeEvaluator 並定義起始值
ValueAnimator.ofObject(MyTypeEvaluator(), startPropertyValue, endPropertyValue).apply {
duration = 1000
addUpdateListener { updatedAnimation ->
// 針對要設定動畫的屬性提供不同的 value type
}
start()
}
Property Animation 和一般的 View Animation 的差別是 View 的動畫可以改變的屬性有限,像是縮放和旋轉,但是 Property 的動畫就不限跟 View 相關的屬性,像是 background color 這種也可以加上動畫效果改變。但也因為限制比較多,View Animation 的使用就比 Property Animation 來得方便,越大程度的自由還是要付出相對代價的。
動畫也可能隨著狀態的改變有不同設定,例如被點選前後的樣式不同可以加上 StateListAnimator 的屬性,先在 res/xml/ 的路徑下新增 XML,針對 state_pressed
為 true 或 false 設定不同 ValueAnimator,在要加上動畫的物件再加上 android:stateListAnimator
的屬性設定動畫。
Animator 其實都對 UI 加上額外繪製的工作,在使用時要特別注意效能問題,可以使用 Android Studio 的 Profile GPU Rendering 工具檢測效能是否正常。 如果喜歡今天分享的內容的邦友請繼續關注「打造一個厲害的普通 Android App - 使用者體驗優化」的主題,我們明天見。